import Vue from 'vue'

// base.css 样式重置 初始化 去掉内外边距...
import 'normalize.css/normalize.css' // A modern alternative to CSS resets

// 组件库: 完整引入/按需引入
// 按需引入: 我要啥我拿啥 => 代码体积小 ,体验好
// 全部引入: 你有啥我都要 => 代码体积大, 使用组件方便  !!!
// 原则: 我们这个项目是后台管理项目, 不是为了盈利, 不是为了让用户用户爽, 主要是为了管理公司内部员工, 用户体验没那么重要;  项目比较大, 组件库中的组件可能也会用的7788, => 全部导入!!!

// 导入所有组件
import ElementUI from 'element-ui'
// 导入所有的样式
import 'element-ui/lib/theme-chalk/index.css'
// 导入组件库的英文语言包
// import locale from 'element-ui/lib/locale/lang/en' // lang i18n

// @ => vuecli脚手架创建出来的项目中有一个src的别名
// 导入了项目中的全局样式
import '@/styles/index.scss' // global css

import App from './App'
import store from './store'

import router from './router'

import '@/icons' // svg精灵图
// 直接导入js文件, 直接执行该文件
import '@/permission' // permission control

// import '@/styles/element-variables.scss'

// 删了mock相关的代码(3个地方),  重启项目, 报错正常!!!

// set ElementUI lang to EN
// 安装组件库(全局注册组件) 以及设置语言模式 英文
// Vue.use(ElementUI, { locale })
// 如果想要中文版 element-ui，按如下方式声明
// 全局注册了所有的组件
// ElementUI => 插件对象,提供install(大量的注册)
console.log(ElementUI, '--------------------')
// Vue.use(ElementUI)

// 设置组件库的中英切换逻辑
Vue.use(ElementUI, {
  i18n: (key, value) => i18n.t(key, value)
})

// 有一种语法: 一次性导入所有的按需导出   const { data: data1 } =  res
import * as directives from '@/directives'

// 导入i18n这个插件实例
import i18n from '@/lang'

// ['imgerror', 'color']
// Object.keys(obj) 这种对象的遍历语法, 因为先得到一个数组, 此时数组的方法较多, 比较灵活(筛选filter, 排序sort...)
Object.keys(directives).forEach(key => {
  Vue.directive(key, directives[key])
})

// 希望全局注册很多组件, 但是不希望在main.js中出现大量的导入和注册的代码
// 通过分析组件库, 因为组件库也有很多组件要用, 全部导入=>全局注册了所有的组件=>我们只看到了Vue.use
// 我们也想通过Vue.use()  能够实现很多组件的注册
// 因为我们想用Vue.use()  用的时候只能传一个插件对象(必须install)
// import PageTools from '@/components/PageTools'
// Vue.component('PageTools', PageTools)
import components from '@/components'
// 只要你use了一个插件, 此时插件的install方法调用
Vue.use(components)

// import { formatTime } from '@/filters'
// Vue.filter('formatTime', formatTime)
// 一次性导入所有的按需导出,  进行全局注册过滤器
import * as filters from '@/filters'
// console.log(obj, 8080)
// [ 'formatTime' ]
Object.keys(filters).forEach(key => {
  Vue.filter(key, filters[key])
})

// 下载=>导入=>安装
import Print from 'vue-print-nb'
// 在全局注册一个自定义指令 v-print
Vue.use(Print)

Vue.config.productionTip = false

// 将App.vue根组件渲染在指定挂载点(最重要的!!)

// this.$router => router路由实例 可以路由跳转
// i18n挂载到Vue实例上时, 会给每一个组件实例注入一个$t方法, 专门用于进行语言切换
new Vue({
  el: '#app',
  router,
  store,
  i18n,
  render: h => h(App)
})
